import router, { asyncRoutes } from '@/router'
// 因为store里index.js中已经引入getters了  所以下面直接引store
import store from '@/store'
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
// 全局前置导航守卫
// 创建白名单
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 打开进度条
  NProgress.start()
  // 先判断有没有token
  const token = store.getters.token
  if (token) {
    if (to.path === '/login') {
      next('/') //  跳转到首页
      NProgress.done() // 发生重定向后 不会执行后置守卫 所以关闭不了进度条
    } else {
      // 在这里掉接口可以实时获取用户的权限
      const userInfo = store.state.user.userInfo
      // console.log(userInfo)
      if (Object.keys(userInfo).length <= 0) {
        const { roles: { menus }} = await store.dispatch('user/getUserinfo')
        // console.log(menus)
        // 1.先筛选出符合条件的路由规则
        // asyncRoutes 先筛选
        const newARoutes = asyncRoutes.filter(item => {
          return menus.includes(item.children[0].name)
        })
        // console.log(newARoutes)
        store.commit('permission/setRoutes', [...newARoutes, { path: '*', redirect: '/404', hidden: true }])
        // 2.动态添加符合条件的路由规则
        // addRoutes 是异步的
        router.addRoutes([...newARoutes, { path: '*', redirect: '/404', hidden: true }]) // 用来做跳转
        // 作用：保证addRoutes这个异步操作执行完毕
        next({
          // path: to.path,
          // query: to.query,
          ...to,
          // 替换历史记录中的地址
          replace: true
        })
        return
      }
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()// 发生重定向后 不会执行后置守卫 所以关闭不了进度条
    }
  }
})

// 全局后置导航守卫
router.afterEach((to, from) => {
  // 关闭进度条
  NProgress.done()
})
